home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Celestin Apprentice 7
/
Apprentice-Release7.iso
/
Source Code
/
Pascal
/
Snippets
/
PNL Libraries
/
MyTermination.p
< prev
next >
Wrap
Text File
|
1996-05-20
|
998b
|
61 lines
unit MyTermination;
interface
uses
Types;
type
TermProcType = procedure;
procedure InitTermination(term:TermProcType);
procedure FinishTermination;
implementation
uses
Traps,MyCallProc,MyUtils,PreserveA5;
var
gTermination:TermProcType;
gExitToShell:UniversalProcPtr;
procedure CallTermination;
var
tmp:TermProcType;
begin
if gTermination<>nil then begin
tmp:=gTermination;
gTermination:=nil;
tmp();
end;
end;
procedure ExitToShellPatch;
var
olda5:Ptr;
lExitToShell:UniversalProcPtr;
begin
olda5:=SetPreservedA5;
CallTermination;
lExitToShell:=gExitToShell;
RestoreA5(olda5);
CallPascal0(lExitToShell);
end;
procedure InitTermination(term:TermProcType);
begin
gTermination:=term;
if term<>nil then begin
gExitToShell:=MyGetTrapAddress(_ExitToShell);
MySetTrapAddress(NewProc(@ExitToShellPatch,uppPascal0ProcInfo),_ExitToShell);
end;
end;
procedure FinishTermination;
begin
CallTermination;
end;
end.